#-*-coding:utf8-*-

""" donnees ---> Ce module est le fichier de configuration, il contient toutes les informations que l'utilisateur peut modifier et qui impacte directement sur le fonctionnement du projet """

from math import *
from random import *


#################### Paramètres SIR ######################
SIR = True

# Tant que le capteur doit diffuse les données, alors diffuse au Nombre_Capteur_Diffuse capteurs de son voisins
Nombre_Capteur_Diffuse = 2

# Chaque 50 seconde la puits est arrivé
Presence_Puits = 10

# Chaque 5 temps le capteur diffuse les données
Taux_Diffusion = 5
# Le nombre de repetition de la simulation
NOMBRE_SIR = 10

############## Paramètres généraux #######################
# Tout les combien de secondes faut-il mettre à jour ?
MISE_A_JOUR = 1  # ça marche pas bien si trop faible

# Faut-il tracer une vidéo de la fonction que le réseau doit capter ?
videoRealite = False

TEMPS_ECOUTE = 10
TEMPS_SIMULATION = 10
NOMBRE_SIMULATION = 100

# Choisie le topologie #

# 1. Si le reseaux avec agregateur
# 2. Si le reseaux sans agregateur (de capteur a capteur cible )

Topologie = 1

## Les agrégateurs envoyent directement leurs agrégats au puits (True/False) (si Topologie=1)?
DIRECT_AGREGATEUR_PUITS = False

# # Les capteurs envoyent directement leurs donnees au plus proche de puits (True/False) (si Topologie=2)?
DIRECT_CAPTEUR_PUITS = False

# Range du capteur si DIRECT_CAPTEUR_PUITS = True
Range = 0.2

############## Le Puits ################################################
POSITION_PUITS = (0,0)

############## Chiffrement ##############
# Est-ce que l'on chiffre les données ?
CHIFFREMENT = False 

# Mettre le nom du fichier de clés ici, si besoin
fichierCles = None
#fichierCles = 'data/cleRsa1024'
tailleCles = 1024
SAUVEGARDE_CLES = False


############## Paramètres des agrégateurs si Topologie=1 ########################

# Perdu_Energie_Agregateur1 : si l'agregateur agreger les données apres anvoyer a l'agregateur cible
# Perdu_Energie_Agregateur2 : si l'agregateur va envoyer les données a l'agregateur cible

Perdu_Energie_Agregateur1 = "(time() - temps)*vitesseAgregateur**Distance(agregateur, agregateurCible)"
Perdu_Energie_Agregateur2 = "vitesseAgregateur*Distance(agregateur, agregateurCible) "

# Méthode de calcul du nombre d'agrégateurs
# 1. Tirage Gaussien,
# 2. Tirage uniforme,
# 3. Fixé par l'utilisateur.
choixNbAgregateurs = 3

# Cas du choix 3 : Fixé par l'utilisateur
AgregateursTotaux = 16

# Le nombre de valeurs qu'un agrégateur stocke avant d'agréger
MemoireAgregateurs = 3

# La vitesse à laquelle la batterie baisse :
# coefficient multiplicateur du temps passé pour effectuer les calculs
vitesseAgregateur = 100

# La taille de la batterie
BatterieAgregateurs = 1000

# Perte d'énergie par unité de temps pour l'écoute seule 
coutEcouteAgregateurs = 1

# Distribution des agrégateurs
# 1. Aléatoire
# 2. Suivant une grille
# 3. Kmean
DistributionAgregateurs = 3


############## Paramètres des capteurs ########################

# Perdu_Energie_Capteur1 = 1 si le capteur capter le donnée et l'envoie a l'agregateur ou capteur cible si Topologie = 2
# Perdu_Energie_Capteur2 = 2 si le capteur envoie les données au capteur cible (dans cas si Topologie = 2)

Perdu_Energie_Capteur1 = "(time() - temps)*vitesseCapteurs**Distance(capteur, cible)"
Perdu_Energie_Capteur2 = "vitesseCapteurs*Distance(capteur, cible)" 


# Méthode de calcul du nombre de capteurs
# 1. Tirage Gaussien,
# 2. Tirage uniforme,
# 3. Fixé par l'utilisateur.
choixNbCapteurs = 3

# Cas du choix 3 : Fixé par l'utilisateur
CapteursTotaux = 200

# Distribution des capteurs
# 1. Aléatoire
# 2. Suivant une grille
DistributionCapteurs = 1

# Répartition des capteurs au niveau des agrégateurs si Topologie=1
# 1. Aléatoire
# 2. K-mean
# 3. Plus proche agrégateur.
choixRepartition = 2

# La vitesse à laquelle la batterie baisse :
# coefficient multiplicateur du temps passé pour effectuer les calculs
vitesseCapteurs = 50

# La taille de la batterie
BatterieCapteurs = 100

# Perte d'énergie par unité de temps pour l'écoute seule 
coutEcouteCapteurs = 1

############### Paramètres des Forets Aleatoires ##########################


#nombre de capture
individus = 100

#nombre des arbres dans foret
nbArbre = 100

#list des arbres s'appele foret
foret = []

#temps des capteurs
heure=0

###############  Paramètres des catégories de capteurs  ##############################


#Les catégories des capteurs avec leurs nombres (temperature,pressure,humidity...)
#Le nombre totale des capteurs doit être égale à CapteursTotaux si Fixé par l'utilisateur
Categ = {'temperature': 70, 'pressure': 70 , 'humidity': 60 }

#Les information sur les capteurs de differente categorie    
Categories = \
{'temperature': {'capteursDetectentPanne':[False]*Categ['temperature'], 
                 'loi': "gauss(20*(1+0.005*heure), 1)", 
                 'loiPanne':"gauss(350, 20)", 
                 'erreurCapteur': 0, 
                 'limites': [22.9, 24.5, 26, 28]},
 'pressure'   : {'capteursDetectentPanne':[False]*Categ['pressure'], 
                 'loi': "gauss(5*(1+0.01*heure),0.3)", 
                 'loiPanne':"gauss(20, 0.0)",
                 'erreurCapteur': 1,
                 'limites': [5.99, 6.4, 7.9, 9]},
 'humidity'   : {'capteursDetectentPanne':[False]*Categ['humidity'], 
                 'loi': "gauss(52.5*(1+0.001*heure), 12.5)", 
                 'loiPanne':"gauss(80, 10)",
                 'erreurCapteur': 0,
                 'limites': [ 68, 80, 92, 95]}
}



# Tester si l'environnement de capteur tombe en panne

loiPanne = "expovariate(200*(1-0.01*heure)+0.01)"

#catégorie de chaque données captée

nbCategories = len(Categories[Categories.keys()[0]]['limites']) + 1 

